#ifndef NNE_SOC_JH7110_h_
#define NNE_SOC_JH7110_h_

#include "type.h"
#include "util.h"
#include "mem/dram.h"
#include "mem/sram.h"
#include "mem/mem_if.h"
#include "mem/mem_switch.h"
#include "device/conv_dma.h"
#include "device/conv_path.h"
#include "device/vector_path_v2.h"
#include <memory>

class JH7110{
public:
    JH7110();
    ~JH7110();
    std::unique_ptr<ConvDMA> dma;
    std::unique_ptr<ConvPath> convolutionCore;
    std::unique_ptr<VectorPath_v2> peCore;
    std::shared_ptr<Dram> dram;
    std::shared_ptr<Sram> convolutionCoreSram;
    std::shared_ptr<Sram> peCoreSram;
    const u64 dramStartAddr;
    const u64 convCoreStartAddr;
    const u64 peCoreStartAddr;
private:
    std::shared_ptr<NNE50v2MemSwitch> memSwitch;
};

#endif
